考点
sql注入(regexp注入)
前置知识
regexp注入
在sql语句中
select database(); // 是输出当前打开的是数据库名
select database() regexp”^d”; // 这样可以匹配数据库名的开头是 d
是就会返回 1 不是则返回0
当sql语句是这样
select * from users where user=’’||password;
可以看到出来两条数据,至于为什么会出来两条数据,我很好奇,按理说 ''||password
为逻辑运算,结果 只能为1 或者 0 ,当user =0/1的时候,并没有字段能够满足,但还是查询出来两条数据???先不纠结这个,做题要紧。
接下来 可以通过 ''||passwor dregexp"^8d"
的方式 不断匹配出数据当中 password的值。
这个就是regexp注入。
解题过程
打开
一个登录页面,还显示了提交的sql语句。
dirsearch扫目录
1 | python3 dirsearch.py -u "http://08df778b-b131-45e7-9eff-822311e44b07.node4.buuoj.cn:81/" -x 404,429 -s 1 |
可以得到一些提示信息,打开 robots.txt
实际上提示的就是 hint.txt
可以发现过滤了很多关键字,提示信息说只需要找到admin的密码 提交,然后就能拿到flag。
这种题我也没做过,直接跟随大佬的脚步,看了wp,regexp注入。
首先构造payload。
1 | username=\&passwd=||passwd/**/regexp"^y";%00 |
为什么要这么构造呢?
1 | 页面上回显的sql语句 |
python写脚本
1 | import requests |
容易跑到一半就报错,直接把得到的结果手动拼上去继续跑
得到
1 | you_will_never_know7788990 |
提交
1 | username=&passwd=you_will_never_know7788990 |
总结
这道题,又让我学到了sql注入的一种新姿势。